package milkyway.hightech.customer;

import milkyway.hightech.comparators.SortOrder;
import milkyway.hightech.conditions.GiroCondTypes;
import milkyway.hightech.conditions.InvCondTypes;
import milkyway.hightech.formatter.FormatterTypes;
import milkyway.hightech.money.Currency;

import java.math.BigInteger;

/**
 *
 * @author michael
 */
public interface BankCustomerView
{
    /**
     *
     * @param accountHolder
     * @param conditionType
     * @return
     */
    public String openInvestmentAccount(String accountHolder,
        InvCondTypes conditionType);

    /**
     *
     * @param accountHolder
     * @param conditionType
     * @return
     */
    public String openGiroAccount(String accountHolder,
        GiroCondTypes conditionType);

    /**
     *
     * @param accountNumber
     * @return
     */
    public String getAccountBalance(Integer accountNumber);

    /**
     *
     * @param accountNumber
     * @param amount
     * @return
     */
    public String payInMoney(Integer accountNumber, BigInteger amount);

    /**
     *
     * @param accountNumber
     * @param amount
     * @return
     */
    public String drawMoney(Integer accountNumber, BigInteger amount);

    /**
     *
     * @param bank
     * @param sourceAccount
     * @param targetAccount
     * @param amount
     * @param currency
     * @param reasonOfTransfer
     * @return
     */
    public String transferMoney(String bank, Integer sourceAccount,
        Integer targetAccount, BigInteger amount, Currency currency,
        String reasonOfTransfer);

    /**
     *
     * @param accountNumber
     * @param fileName
     * @param mimeType
     * @param sortOrder
     * @return
     */
    public Object[] getAccountStatement(Integer accountNumber, String fileName,
        FormatterTypes mimeType, SortOrder sortOrder);

    /**
     *
     * @return
     */
    public String getConditions();
}